-- =============================================================================================
-- table

-- 数组 ====================================================
-- 注意：Lua 里面的数组的索引从 1 开始的
-- 小知识点：数组可以看成特殊的 map , 索引可以看成 map 的 key

-- 定义一个 一维 数组
-- cities = {"北京","上海","广州"}
-- cities[4] = "深圳"

-- for i=1, 4 do
--     print(cities[i])
-- end

-- print(cities[5]) -- 输出不存在的数组索引，值为nil（空）

-- -- nil 在 判断 中视为 false
-- if cities[5] then
--     print("存在true")
-- else
--     print("不存在false")
-- end


-- 定义一个 二维 数组 =========================================

-- -- 声明一个空数组
-- arr = {}

-- for i=1, 3 do
--     arr[i] = {}
--     for j=1, 2 do
--         arr[i][j] = i * j
--     end
-- end

-- -- 遍历二维数组
-- for i=1, 3 do
--     for j=1, 2 do
--         print(arr[i][j])
--     end
-- end

-- =============================================================================================
-- map

-- -- 定义一个 map
-- emp = {name="张三", age=23, depart="销售部"}

-- -- 通过下标方式操作 ===============================
-- emp["gender"] = "男"

-- -- 输出
-- print(emp["name"])
-- print(emp["gender"])

-- -- 点号方式操作 ==================================
-- emp.office = "2nd floor"
-- print(emp.office)


-- a = "xxx"
-- b = 3
-- c = 5

-- -- 定义一个 map， 其 key 为表达式
-- arr = {
--     ["emp_"..a] = true,
--     [b + c] = "hello",
--     ["hi"] = 123
-- }

-- print(arr.emp_xxx)
-- print(arr[8]) -- 用 arr.8 会报错
-- print(arr.hi)

-- print(arr) -- table: 地址值


-- ===============================================

-- emp = {"北京", name="张三", age=23, depart="销售部","广州","深圳"}
-- print(emp[1]) -- 北京
-- print(emp[2]) -- 广州
-- print(emp[3]) -- 深圳
-- print(emp[4]) -- nil


-- -- 定义一个数组、map混合结构
-- emps = {
--     {name="张三",age=23},
--     {name="李四",age=24},
--     {name="王五",age=25},
--     {name="赵六",age=26}
-- }

-- for i=1, 4 do
--     print(emps[i].name)
-- end

-- =============================================================================================

-- table 的 API 学习

-- emp = {"北京",name="张三", age=23, "上海", depart="销售部", "广州", "深圳"}
-- emp[8] = "天津"

-- -- A、table.concat() 将指定 table 数组元素进行字符串拼接（可以指定拼接 符号） =============================
-- -- 注意：使用时候其中不允许出现空值
-- print(table.concat(emp,",", 2, 3)) -- 结果：上海，广州

-- -- B、table.unpack 拆包 注意：不支持5.1版本 =============================
-- -- 示例：arr = {"bj","gz","sh","sz"}
-- --      print(table.unpack(arr)) -- 结果：bj   sh   gz   sz
-- print(table.unpack(emp))


-- C、table.pack(...) 打包 注意：不支持5.1版本 =============================
-- 该函数的参数是一个可变参，其可将指定的参数打包为一个 table 返回。
-- 这个返回的table中具有一个属性nm，用于表示该table包含的元素个数.


-- D、table.maxn(table) 获取 table 中元素的最大索引 =============================
-- print(table.maxn(emp))

-- cities = {"北京","上海","广州"}

-- E、table.insert(table,index,value) =============================
-- table.insert(cities,1,"深圳") -- 深圳 北京 上海 广州
-- for i=1, 4 do
--     print(cities[i]) -- 深圳 北京 上海 广州
-- end

-- F、table.remove(table,index) 移除指定索引的元素 =============================
-- table.remove(cities,1) -- 上海 广州 nil nil
-- for i=1, 4 do
--     print(cities[i]) -- 上海 广州 nil nil
-- end

-- cities = {"bj北京","sh上海","gz广州","sz深圳","tj天津"}
-- G、table.sort() 排序√
-- 注意：table中有字符串有数值会报错
-- table.sort(cities) -- 默认按照 首字母 升序
-- print(table.concat(cities,",")) -- bj北京,gz广州,sh上海,sz深圳,tj天津

-- 传入函数（此处用匿名函数）,设置排序规则
-- 设置按照首字母降序
-- table.sort(cities,function (a, b)
--     return a>b
-- end)
-- print(table.concat(cities,","))